Conditioning of evaluating tan()

In [2]:
import numpy as np

import matplotlib.pyplot as pt

Let us estimate the sensitivity of evaluating the $\tan$ function:

In [3]:
x = np.linspace(-5, 5, 1000)

pt.ylim([-10, 10])

pt.plot(x, np.tan(x))
Out[3]:
[<matplotlib.lines.Line2D at 0x7f448ae83ba8>]
In [18]:
x = np.pi/2 - 0.0001

#x = 0.1

x
Out[18]:
1.5706963267948966
In [19]:
np.tan(x)
Out[19]:
9999.9999666616441
In [20]:
dx = 0.00005

np.tan(x+dx)
Out[20]:
19999.99998335545

Condition number estimates

From evaluation data

In [21]:
#clear



np.abs(np.tan(x+dx) - np.tan(x))/np.abs(np.tan(x)) / (np.abs(dx) / np.abs(x))
Out[21]:
31413.926693068603

Using the derivative estimate

In [22]:
import sympy as sp



xsym = sp.Symbol("x")



f = sp.tan(xsym)

df = f.diff(xsym)

df
Out[22]:
tan(x)**2 + 1

Evaluate the derivative estimate. Use .subs(xsym, x) to substitute in the value of x.

In [23]:
#clear

(xsym*df/f).subs(xsym, x)
Out[23]:
15706.9633726542
In [ ]: